' 🟡 DECLARATIONS

  CONST pi2# = _PI(2)                       , _
        side_size% = 501                    , _ 
        pie_center% = (side_size% - 1) / 2  , _
        pie_radius% = pie_center% - 2       , _
        paint_pos_radius% = pie_radius% - 5

  DIM   slice_sum# , _
        slice_pct# , _
        color&

  DECLARE SUB DoRead()
  DECLARE SUB DoChartPhase(phase%)

' 🟡 MAIN PROGRAM

  SCREEN _NEWIMAGE(side_size%, side_size%, 12) : COLOR ,15 : CLS

  CALL DoChartPhase(1)
  CALL DoChartPhase(2)

  END

' 🟡 DATA
  ' slice%, color&

  DATA  14,  1
  DATA  20, 12
  DATA  7,  7
  DATA  38,  2
  DATA  15, 13
  DATA  1,  4
  DATA  5,  14
  DATA  -1

' 🟡 SUBROUTINES

  SUB DoRead()
      READ slice_pct#, color&
  END SUB

  SUB DoChartPhase(phase%)
      RESTORE
      slice_sum# = 0 : CALL DoRead()
      DO
          CIRCLE (pie_center%,pie_center%), pie_radius%, CHOOSE(phase%, 0, 15) , - pi2# * slice_sum# / 100, - pi2# * (slice_pct# + slice_sum#) / 100
          IF phase% = 1 THEN
              PSET (pie_center%,pie_center%), 0
              DRAW "BTA" + (INT( _R2D( ( pi2# * (slice_pct#+slice_sum#)/100 ) ) ) - 2) + " R " + STR$(paint_pos_radius%)
              PAINT (POINT(0),POINT(1)), color&, 0
          END IF
          slice_sum# = slice_sum# + slice_pct#
          READ slice_pct#, color&
      LOOP UNTIL slice_pct# = -1
  END SUB